﻿using System.Text;

namespace HelpDeskTool.Extensions;

public static class StringExt
{
	private static readonly IDictionary<char, char> dictRusLatin = new Dictionary<char, char>
	{
		{ 'а', 'f' }, { 'б', ',' }, { 'в', 'd' },
		{ 'г', 'u' }, { 'д', 'l' }, { 'е', 't' },
		{ 'ё', '`' }, { 'ж', ';' }, { 'з', 'p' },
		{ 'и', 'b' }, { 'й', 'q' }, { 'к', 'r' },
		{ 'л', 'k' }, { 'м', 'v' }, { 'н', 'y' },
		{ 'о', 'j' }, { 'п', 'g' }, { 'р', 'h' },
		{ 'с', 'c' }, { 'т', 'n' }, { 'у', 'e' },
		{ 'ф', 'a' }, { 'х', '[' }, { 'ц', 'w' },
		{ 'ч', 'x' }, { 'ш', 'i' }, { 'щ', 'o' },
		{ 'ъ', ']' }, { 'ы', 's' }, { 'ь', 'm' },
		{ 'э', '\'' }, { 'ю', '.' }, { 'я', 'z' },
	};

	public static string ConvertRusToLatinLower(this string value)
	{
		if (string.IsNullOrWhiteSpace(value))
			return value;

		var trimValue = value.ToLower().Where(x => !char.IsWhiteSpace(x)).ToArray();
		var stringBuilder = new StringBuilder(trimValue.Length);

		foreach (var c in trimValue)
			stringBuilder.Append(dictRusLatin.TryGetValue(c, out var ch) ? ch : c);

		return stringBuilder.ToString();
	}
}
